
package com.udc.medLine.transaction;

import java.util.List;

import org.apache.axis.types.NCName;

import com.opensymphony.module.sitemesh.Factory;
import com.udc.medLine.entity.Cidade;
import com.udc.medLine.entity.Cliente;
import com.udc.medLine.entity.CondicaoVO;
import com.udc.medLine.entity.Endereco;
import com.udc.medLine.entity.Funcionario;
import com.udc.medLine.entity.Perfil;
import com.udc.medLine.factory.FactoryCidade;
import com.udc.medLine.factory.FactoryCliente;
import com.udc.medLine.factory.FactoryFuncionario;
import com.udc.medLine.factory.FactoryPerfil;
import com.udc.medLine.persistence.Bd;

public class TransactionCliente {

	private Cliente cliente;
	private Cidade cidade;
	private Perfil perfil;
	private List listCliente;
	private List listPerfil;
	private List listCidade;
	private Bd banco;
	
	/**
	 * 
	 */
	
	
	public TransactionCliente() {
		super();
		cliente = new Cliente();
		cidade = new Cidade();
		try{
			banco = Bd.getInstance();
		}
		catch(Exception e){
			e.printStackTrace();
		}
		// TODO Stub de construtor gerado automaticamente
	}

	public Cliente getCliente() {
		return cliente;
	}

	public void setCliente(Cliente new_cliente) {
		this.cliente = new_cliente;
	}

	public void remover(Cliente nCliente) throws Exception {
		banco.beginTransaction();
			FactoryCliente factory = new FactoryCliente();
			cliente.setId(nCliente.getId());
			factory.setCliente(cliente);
			factory.setCliente(factory.obterCliente());
			factory.delete();
		banco.commit();
	}

	public void inserir(Cliente nCliente) throws Exception {
		banco.beginTransaction();
			FactoryCliente factory = new FactoryCliente();
			FactoryCidade factoryCidade = new FactoryCidade();
			Endereco endereco = new Endereco();
			FactoryPerfil factoryperfil = new FactoryPerfil();
			cliente.setNome(nCliente.getNome());				
			cliente.setCpf(nCliente.getCpf());
			cliente.setEmail(nCliente.getEmail());
			cliente.setData(nCliente.getData());
			cliente.setRg(nCliente.getRg());
			cliente.setSenha(nCliente.getSenha());
			cliente.setTelefone(nCliente.getTelefone());
			cliente.setUsuario(nCliente.getUsuario());
			
			endereco.setBairro(nCliente.getEndereco().getBairro());
			endereco.setCep(nCliente.getEndereco().getCep());
			endereco.setComplemento(nCliente.getEndereco().getComplemento());
			endereco.setNumero(nCliente.getEndereco().getNumero());
			endereco.setRua(nCliente.getEndereco().getRua());
		
			cidade.setId(nCliente.getEndereco().getCidade().getId());
			factoryCidade.setCidade(cidade);
			cidade = factoryCidade.obterCidade();
			endereco.setCidade(cidade);
     	
			
			cliente.setEndereco(endereco);
     	
     		factoryperfil.setPerfil(nCliente.getPerfil());
			factoryperfil.obterPerfil();
			
			cliente.setPerfil(factoryperfil.getPerfil());
     		factory.setCliente(cliente);
			factory.insert();
		banco.commit();
	}
	
	
	public void atualizar(Cliente nCliente) throws Exception {
		banco.beginTransaction();
		   Cliente clienteaux =  new Cliente();
		   
	       FactoryCliente factory = new FactoryCliente();
		   FactoryPerfil factoryPerfil = new FactoryPerfil();
		   FactoryCidade factoryCidade = new FactoryCidade();
		   Endereco endereco = new Endereco();
    	  
		   cliente.setId(nCliente.getId()); 
		   cliente.setNome(nCliente.getNome());				
		   cliente.setCpf(nCliente.getCpf());
		   cliente.setEmail(nCliente.getEmail());
		   cliente.setData(nCliente.getData());
		   cliente.setRg(nCliente.getRg());
		   cliente.setTelefone(nCliente.getTelefone());
		   
		   
		   endereco.setBairro(nCliente.getEndereco().getBairro());
	       endereco.setCep(nCliente.getEndereco().getCep());
		   endereco.setComplemento(nCliente.getEndereco().getComplemento());
		   endereco.setNumero(nCliente.getEndereco().getNumero());
		   endereco.setRua(nCliente.getEndereco().getRua());
	       
		   cidade.setId(nCliente.getEndereco().getCidade().getId());
		   factoryCidade.setCidade(cidade);
		   cidade = factoryCidade.obterCidade();
		   endereco.setCidade(cidade);
		   
		       
		   factoryPerfil.setPerfil(nCliente.getPerfil());
		   factoryPerfil.obterPerfil();
		   
		   cliente.setSenha(nCliente.getSenha());
		   cliente.setUsuario(nCliente.getUsuario());

		   cliente.setPerfil(factoryPerfil.getPerfil());
		   cliente.setEndereco(endereco);			
           factory.setCliente(cliente);
		   factory.update();
		   banco.commit();
	}


	public void obterListaCliente(String campo, String valor) throws Exception{
		banco.beginTransaction();
			FactoryCliente factory = new FactoryCliente();
			factory.setCliente(new Cliente());
			listCliente = factory.getCliente(campo,valor);
		banco.commit();
	}
	
	public void obterListaCliente() throws Exception{
		banco.beginTransaction();
			FactoryCliente factory = new FactoryCliente();
			factory.setCliente(new Cliente());
			listCliente = factory.getListaClientes();
		banco.commit();
	}
	
	public void obterCliente(Cliente nCliente) throws Exception{
		banco.beginTransaction();
			FactoryCliente factory = new FactoryCliente();
			cliente.setId(nCliente.getId());
			factory.setCliente(cliente);
			cliente = factory.obterCliente();
		banco.commit();
	}
	
	public void obterCidade(Cidade cidadeaux) throws Exception{
		banco.beginTransaction();
		    FactoryCidade factory = new FactoryCidade();
		    factory.setCidade(cidadeaux);
		    cidade =  factory.obterCidade();
		banco.commit();
	}
	
	public void obterPerfil(Perfil perfil) throws Exception{
		banco.beginTransaction();
		    FactoryPerfil factory = new FactoryPerfil();
		    factory.setPerfil(perfil);
		    perfil =  factory.obterPerfil();
		banco.commit();
	}
	
		
	public void obterListaPerfil() throws Exception{
		banco.beginTransaction();
			FactoryPerfil factory = new FactoryPerfil();
			listPerfil = factory.getListaPerfil();
		banco.commit();
	}
	
	public void obterListaCidade() throws Exception{
		banco.beginTransaction();
			FactoryCidade factory = new FactoryCidade();
			listCidade = factory.getListaCidade();
		banco.commit();
	}
	
	/**
	 * @return
	 */
	public List getListCliente() {
		return listCliente;
	}

	/**
	 * @param list
	 */
	public void setListCliente(List list) {
		listCliente = list;
	}

	/**
	 * @return
	 */
	public Perfil getPerfil() {
		return perfil;
	}

	/**
	 * @param perfil
	 */
	public void setPerfil(Perfil perfil) {
		this.perfil = perfil;
	}

	/**
	 * @return Returns the listPerfil.
	 */
	public List getListPerfil() {
		return listPerfil;
	}
	/**
	 * @param listPerfil The listPerfil to set.
	 */
	public void setListPerfil(List listPerfil) {
		this.listPerfil = listPerfil;
	}
	/**
	 * @return the listCidade
	 */
	public List getListCidade() {
		return listCidade;
	}

	/**
	 * @param listCidade the listCidade to set
	 */
	public void setListCidade(List listCidade) {
		this.listCidade = listCidade;
	}
	public List<Cliente> search(CondicaoVO condicao) throws Exception {
		banco.beginTransaction();
		FactoryCliente factory = new FactoryCliente();
		listCliente = factory.search(condicao);
		banco.commit();
		return listCliente;
	}
	
	public List<Cliente> searchCriterio(CondicaoVO condicao) throws Exception {
		banco.beginTransaction();
		   FactoryCliente factory = new FactoryCliente();
		   listCliente = factory.searchCriteria(condicao);
		banco.commit();
		return listCliente;
	}
}
